package com.tianqu.tms.www.transfer.controller;

import com.tianqu.tms.core.base.Logger;
import com.tianqu.tms.core.base.TmsController;
import com.tianqu.tms.core.base.TxController;
import com.tianqu.tms.core.base.UserContext;
import com.tianqu.tms.core.exception.TmsException;
import com.tianqu.tms.core.exception.TransactionException;
import com.tianqu.tms.core.security.TmsUserProfile;
import com.tianqu.tms.core.util.TmsConstants;
import com.tianqu.tms.dao.PaizhengHistoryDaoImp;
import com.tianqu.tms.dao.TmsDao;
import com.tianqu.tms.dao.TmsTransferFinanceDetailDao;
import com.tianqu.tms.dao.TmsTransferFinanceDetailDaoImp;
import com.tianqu.tms.dao.TransferProcessHistoryDaoImp;
import com.tianqu.tms.dto.FinanceDetailDto;
import com.tianqu.tms.dto.PaizhengHistoryDto;
import com.tianqu.tms.dto.TransferProcessHistoryDto;
import com.tianqu.tms.entity.Member;
import com.tianqu.tms.entity.TmsChange;
import com.tianqu.tms.entity.TransferAcceptedInfo;
import com.tianqu.tms.www.transfer.viewhelper.TransferRgInputViewHelper;

public class PLicenseInputResultController extends TmsController {
    private Logger logger = Logger.getLogger(PLicenseInputResultController.class);

    @Override
    public void execute(UserContext uc) throws Exception {
        logger.debug(this.getClass().getName() + "#execute was called.");
        TxController controller = getTxController();
        try {
            controller.begin();
            TransferRgInputViewHelper view = (TransferRgInputViewHelper) uc.getAttribute(TmsConstants.VIEWHELP);
            TmsUserProfile profile = uc.getUserProfile();
            TransferAcceptedInfo accept = new TransferAcceptedInfo();
            accept = accept.getAcceptInfoOnlyBySerial(view.getSerial(), "");
            /*
             * 更新“过户业务基本信息表 (tms_transfer_accepted_info)” #
             * 牌证表打印缴费状态（conformityMark）：为 2，否。 # 牌证表打印日期（pg_time）：为当前系统时间。 #
             * 更新时间（updateTime）：为当前系统时间 # 更新用户（updateUserId）：为当前登录用户id
             */
            accept.setConformityMark(2);
            accept.setUpdateUserId(profile.getUniqueId());
            accept.updateConformityMarkBySerial(accept);

            /*
             * 4）插入“牌证表打印记录表 (tms_paizheng_history)” # 过户流水号（serial）：为过户业务基本信息表
             * (tms_transfer_accepted_info)对应的流水号 #
             * 牌证表打印类型（paizhengStatus）：为页面所选牌证类型。 #
             * 牌证表打印人（insertUserid）：为牌证表打印用户对应的tms_user的id值。 #
             * 牌证表打印时间（insertTime：为当前系统时间。
             */
            PaizhengHistoryDto paizhengHistoryDto = new PaizhengHistoryDto();
            paizhengHistoryDto.setSerial(view.getSerial());
            paizhengHistoryDto.setPaizhengStatus(view.getBusinessType());
            paizhengHistoryDto.setInsertUserId(profile.getUniqueId());
            PaizhengHistoryDaoImp paizhengHistoryDao = (PaizhengHistoryDaoImp) PaizhengHistoryDaoImp.getInstance(TmsDao.TMS_PAIZHENG_HISTORY);
            paizhengHistoryDao.insertPaizhengHistory(paizhengHistoryDto);
            /*
             * 5）插入"过户流程操作记录表（tms_transfer_process_history）" #
             * 车辆流水号（serial）：为对应的车辆流水号。 # 业务类型（businessType）：51，打印牌证表 #
             * 业务受理人（insertUserId）：为牌证表打印用户对应的tms_user的id值。 #
             * 业务受理时间（insertTime）：为当前系统时间
             */
            TransferProcessHistoryDto transferProcessHistoryDto = new TransferProcessHistoryDto();
            transferProcessHistoryDto.setBusinessType(51);
            transferProcessHistoryDto.setInsertUserId(profile.getUniqueId());
            String serial = view.getSerial();
            transferProcessHistoryDto.setSerial(serial);
            TransferProcessHistoryDaoImp transferProcessHistoryDao = (TransferProcessHistoryDaoImp) TransferProcessHistoryDaoImp.getInstance(TmsDao.TMS_TRANSFER_PROCESS_HISTORY);
            transferProcessHistoryDao.insertHisInfoBySerial(transferProcessHistoryDto);
            /*
             * 7）自动扣费规则。 如果操作人类型是商户会员，即“当前操作人对应tms_user表的userType为：2，商户会员”
             * 当业务类型为：2，补证；或者 3，补书，计费50元 当业务类型为：1，补牌，计费0元
             * 更新“商户会员信息数据表（tms_member
             * ）”，过户费余额（virtualMargin）=原过户费余额（virtualMargin）-计费总和”的值。
             */
            int priceTemp = 0;
            if (2 == profile.getUserType()) {
                if ("2".equals(view.getBusinessType()) || "3".equals(view.getBusinessType())) {
                    priceTemp = 50;
                } else if ("1".equals(view.getBusinessType())) {
                    priceTemp = 0;
                }
                Member member = Member.getInstance();
                member = member.findMemberInfoByUserId(profile.getLoginId());
                // int virtualprice = virtualMargin - checkPrice -
                // transferPrice;
                int virtualprice = Integer.valueOf(member.getVirtualMargin()) - priceTemp;
                // 更新 会员基本信息数据表（tms_member）
//                member.updateMemberVirtualMargin(memberId, virtualprice);

//                Member member = Member.getInstance();
//                member = member.findMemberInfoByUserId(profile.getLoginId());
//                String memberId = view.getMemberId();
//                    int virtualprice = virtualMargin - checkPrice - transferPrice;
//                int virtualprice = Integer.valueOf(member.getVirtualMargin()) - tempPrice;
                //更新 会员基本信息数据表（tms_member）
                member.updateMemberVirtualMarginByUserId(profile.getLoginId(),virtualprice);
            }
            /*
             * 7）插入 “过户业务财务收费明细表（tms_transfer_finance_detail）” #
             * 车辆流水号（serial）为关联的过户业务基本信息表
             * （tms_transfer_accepted_info）的车辆流水号（serial） #
             * 费用类型（priceType）为：页面所选的值。 # 处理方式（priceChargeType）为“3：过户充值” #
             * 处理类型（priceWay）为“1：收费” # 费用金额（price）为“计费总和的值 #
             * 处理日期（priceDate）为当前系统时间 # 操作员ID（priceUserId）为当前操作用户ID
             */

            FinanceDetailDto financeDetailDto = new FinanceDetailDto();
            financeDetailDto.setSerial(serial);
            financeDetailDto.setPriceType(Integer.valueOf(view.getBusinessType()));
            financeDetailDto.setPriceChangeType(3);
            financeDetailDto.setPriceWay(1);
            financeDetailDto.setPrice(priceTemp);
            financeDetailDto.setPriceUserId(profile.getUniqueId());
            TmsTransferFinanceDetailDao financeDetailDao = (TmsTransferFinanceDetailDao) TmsTransferFinanceDetailDaoImp.getInstance(TmsDao.TMS_TRANSFER_FINANCE_DETAIL);
            financeDetailDao.insertFinanceDetail(financeDetailDto);
            // 每次新增都去表中查询一下
            TmsChange change = new TmsChange();

            change.setSerial(accept.getSerial());
            change.setPrintType(2);
            change.setOwnerIdCardNo(accept.getCarOwnerIdCardNo());
            change.setOwnerAddress(accept.getOwnerAddress());
            change.setOwnerPhone(accept.getOwnerPhone());
            if (view.getLsZipCode() != null && !"".equals(accept.getZipCode())) {
                change.setOwnerZipCode(Integer.parseInt(accept.getZipCode()));
            } else {
                change.setOwnerZipCode(0);
            }
            change.setMailAddress(accept.getMailAddress());
            change.setInsertUserId(profile.getUniqueId());
            if (!"省".equals(accept.getMoveOutProvince())) {
                change.setMoveOutProvince(accept.getMoveOutProvince());
            } else {
                change.setMoveOutProvince("");
            }
            if (!"市".equals(accept.getMoveOutCity())) {
                change.setMoveOutCity(accept.getMoveOutCity());
            } else {
                change.setMoveOutCity("");
            }
            change.insertChangeInfo(change);
            logger.debug(this.getClass().getName() + "#execute was completed.");
            controller.commit();
        } catch (Exception e) {
            try {
                controller.rollback();
            } catch (TransactionException e1) {
                throw new TmsException(TmsException.DB_TXCRROR, e1);
            }
            // 系统异常
            if (e instanceof TmsException) {
                throw e;
            }
            throw new TmsException(TmsException.DB_TXCRROR, e);
        }
    }
}
